home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the 3D Game Programming Gurus / gurus.iso / DirectX / dx9sdkcp.exe / SDK (C++) / Bin / DXUtils / Visual Studio 6.0 Wizards / AEDMOWiz.awx / TEMPLATE / CLASSNAME.H < prev    next >
Encoding:
C/C++ Source or Header  |  2002-12-11  |  9.7 KB  |  252 lines

  1. //------------------------------------------------------------------------------
  2. // File: $$CLASS_NAME$$.h
  3. //
  4. // Desc: Audio Effect DMO Wizard generated code - Definition of $$CLASS_NAME$$
  5. //
  6. // Author: $$DSDMO_AUTHOR$$
  7. //
  8. // Copyright (c) Microsoft Corporation.  All rights reserved.
  9. //------------------------------------------------------------------------------
  10.  
  11. /////////////////////////////////////////////////////////////////////////////
  12. // TODO List: 
  13. $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
  14. //  - Add the DMO parameters to the $$DSDMOID_NAME$$FilterParams enumeration
  15. //  - Provide information about the DMO parameters in the g_params array
  16. $$ENDIF
  17. //  - Add member variables / functions
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20.  
  21. #ifndef __$$CLASS_NAME$$_H_
  22. #define __$$CLASS_NAME$$_H_
  23.  
  24. #include "resource.h"
  25. #include <uuids.h>
  26.  
  27. #include "$$DLL_NAME$$.h"
  28.  
  29. $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
  30. ///////////////////////////////////////////////////////////////////////////////
  31. // Parameter Info
  32. //
  33. const MP_CAPS g_capsAll = MP_CAPS_CURVE_JUMP | MP_CAPS_CURVE_LINEAR | MP_CAPS_CURVE_SQUARE | MP_CAPS_CURVE_INVSQUARE | MP_CAPS_CURVE_SINE;
  34.  
  35. // TODO: Add the DMO parameters to the enumeration
  36. enum $$DSDMOID_NAME$$FilterParams
  37. {
  38. $$IF(EMPTY_DSDMO)
  39.     $$DSDMO_DEFINE$$_PARAM1 = 0,    // NOTE: $$DSDMO_DEFINE$$_PARAM1 is provided as an example    
  40. $$ELSE    // Sample DMO
  41.     PANNER_FREQ = 0,
  42.     PANNER_WIDTH,
  43. $$ENDIF
  44. };
  45.  
  46. ///////////////////////////////////////////////////////////////////////////////
  47. // The ParamInfo struct is defined as:
  48. //   typedef struct _ParamInfo
  49. //   {
  50. //        DWORD dwIndex;              // Index for the parameter
  51. //        MP_PARAMINFO    MParamInfo; // Parameter info
  52. //        WCHAR *         pwchText;   // Text name for the parameter
  53. //   } ParamInfo;
  54. ///////////////////////////////////////////////////////////////////////////////
  55. // TODO: Provide information about the DMO parameters
  56. static ParamInfo g_params[] =
  57. {
  58. //    index                    type        caps        min,    max,  neutral,    unit text,  label,        parameter name
  59. $$IF(EMPTY_DSDMO)
  60.     $$DSDMO_DEFINE$$_PARAM1,MPT_INT,    g_capsAll,    0,        100,    0,        L"units",    L"Param1",    L"Param1",
  61. $$ELSE    // Sample DMO
  62.     PANNER_FREQ,            MPT_FLOAT,    g_capsAll,    0.1f,    20,        6.5f,    L"Hz",        L"LFO",        L"LFO",
  63.     PANNER_WIDTH,            MPT_FLOAT,    g_capsAll,    0,        1,        0.8f,    L"x",        L"Width",    L"Width",
  64. $$ENDIF
  65. };
  66. ///////////////////////////////////////////////////////////////////////////////
  67. ///////////////////////////////////////////////////////////////////////////////
  68. $$ENDIF
  69.  
  70. $$IF(!EMPTY_DSDMO)    // Sample DMO
  71. // Sine wave table used for panning modulation
  72. //    (Quarter cycle of a sine wave)
  73. const float SINE[] = {
  74. // Resolution = 90
  75.     0.000001f,0.017452f,0.034899f,0.052336f,0.069756f,0.087156f,0.104528f,0.121869f,0.139173f,0.156434f,
  76.     0.173648f,0.190809f,0.207912f,0.224951f,0.241922f,0.258819f,0.275637f,0.292372f,0.309017f,0.325568f,
  77.     0.342020f,0.358368f,0.374607f,0.390731f,0.406737f,0.422618f,0.438371f,0.453991f,0.469472f,0.484810f,
  78.     0.500000f,0.515038f,0.529919f,0.544639f,0.559193f,0.573576f,0.587785f,0.601815f,0.615661f,0.629320f,
  79.     0.642788f,0.656059f,0.669131f,0.681998f,0.694658f,0.707107f,0.719340f,0.731354f,0.743145f,0.754710f,
  80.     0.766044f,0.777146f,0.788011f,0.798636f,0.809017f,0.819152f,0.829038f,0.838671f,0.848048f,0.857167f,
  81.     0.866025f,0.874620f,0.882948f,0.891007f,0.898794f,0.906308f,0.913545f,0.920505f,0.927184f,0.933580f,
  82.     0.939693f,0.945519f,0.951057f,0.956305f,0.961262f,0.965926f,0.970296f,0.974370f,0.978148f,0.981627f,
  83.     0.984808f,0.987688f,0.990268f,0.992546f,0.994522f,0.996195f,0.997564f,0.998630f,0.999391f,0.999848f,
  84. };
  85. const int SINE_TABLE_SIZE = sizeof(SINE) / sizeof(double);
  86. $$ENDIF
  87.  
  88. /////////////////////////////////////////////////////////////////////////////
  89. // $$CLASS_NAME$$
  90. class ATL_NO_VTABLE $$CLASS_NAME$$ : 
  91.     public CComObjectRootEx<CComMultiThreadModel>,
  92.     public CComCoClass<$$CLASS_NAME$$, &CLSID_$$DSDMO_DEFINE$$>,
  93.     public IMediaObjectImpl<$$CLASS_NAME$$,1,1>,                // DMO Template (1 input stream & 1 output stream)
  94.     public IMediaObjectInPlace,
  95. $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
  96.     public CParamsManager,
  97.     public CParamsManager::UpdateCallback,
  98.     public IPersistStream,
  99. $$ENDIF
  100. $$IF(SUPPORT_DS_DMP)
  101.     public ISpecifyPropertyPages,
  102. $$ENDIF
  103.     public $$INTERFACE_NAME$$
  104. {
  105. friend class IMediaObjectImpl<$$CLASS_NAME$$,1,1>;
  106. friend class LockIt;
  107.  
  108. public:
  109.     $$CLASS_NAME$$();    // Constructor
  110.     ~$$CLASS_NAME$$();    // Destructor
  111.  
  112. DECLARE_REGISTRY_RESOURCEID(IDR_$$DSDMO_DEFINE$$)
  113. DECLARE_GET_CONTROLLING_UNKNOWN()
  114.  
  115. DECLARE_PROTECT_FINAL_CONSTRUCT()
  116.  
  117. BEGIN_COM_MAP($$CLASS_NAME$$)
  118.     COM_INTERFACE_ENTRY_IID(IID_IMediaObject, IMediaObject)
  119.     COM_INTERFACE_ENTRY(IMediaObjectInPlace)
  120. $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
  121.     COM_INTERFACE_ENTRY(IMediaParams)
  122.     COM_INTERFACE_ENTRY(IMediaParamInfo)
  123.     COM_INTERFACE_ENTRY(IPersistStream)
  124. $$ENDIF
  125. $$IF(SUPPORT_DS_DMP)
  126.     COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
  127. $$ENDIF
  128.     COM_INTERFACE_ENTRY_IID(IID_$$INTERFACE_NAME$$, $$INTERFACE_NAME$$)
  129.     COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
  130. END_COM_MAP()
  131.  
  132.     HRESULT FinalConstruct()
  133.     {
  134.         return CoCreateFreeThreadedMarshaler(
  135.             GetControllingUnknown(), &m_pUnkMarshaler.p);
  136.     }
  137.  
  138.     void FinalRelease()
  139.     {
  140.         FreeStreamingResources();  // In case client does not call this.
  141.         m_pUnkMarshaler.Release();
  142.     }
  143.  
  144.     CComPtr<IUnknown> m_pUnkMarshaler;
  145.  
  146. public:
  147.     // IMediaObjectInPlace Methods
  148.     STDMETHODIMP STDMETHODCALLTYPE Process(ULONG ulSize, BYTE *pData, REFERENCE_TIME refTimeStart,DWORD dwFlags);
  149.     STDMETHODIMP STDMETHODCALLTYPE Clone(IMediaObjectInPlace **ppMediaObject);
  150.     STDMETHODIMP STDMETHODCALLTYPE GetLatency(REFERENCE_TIME *pLatencyTime);
  151.  
  152. $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
  153.     // SetParam handling
  154.     STDMETHODIMP SetParam(DWORD dwParamIndex,MP_DATA value) { return SetParamInternal(dwParamIndex, value, false); }
  155.     HRESULT SetParamUpdate(DWORD dwParamIndex, MP_DATA value) { return SetParamInternal(dwParamIndex, value, true); }
  156.     HRESULT SetParamInternal(DWORD dwParamIndex, MP_DATA value, bool fSkipPasssingToParamManager);
  157.  
  158.     // IPersist Methods
  159.     STDMETHODIMP STDMETHODCALLTYPE GetClassID(CLSID* pClassID);
  160.  
  161.     // IPersistStream Methods
  162.     STDMETHODIMP STDMETHODCALLTYPE IsDirty();
  163.     STDMETHODIMP STDMETHODCALLTYPE Load(IStream* pStream);
  164.     STDMETHODIMP STDMETHODCALLTYPE Save(IStream* pStream, BOOL fClearDirty);
  165.     STDMETHODIMP STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER* pcbSize);
  166. $$ENDIF
  167.  
  168. $$IF(SUPPORT_DS_DMP)
  169.     // ISpecifyPropertyPages Methods
  170.     STDMETHODIMP GetPages(CAUUID *pPages);
  171. $$ENDIF
  172.  
  173.     // $$INTERFACE_NAME$$ Methods
  174. $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
  175.     STDMETHOD(SetAllParameters)        (THIS_ LPC$$DSDMOID_NAME$$Params pParm);
  176.     STDMETHOD(GetAllParameters)        (THIS_ LP$$DSDMOID_NAME$$Params pParm);
  177. $$ENDIF
  178. // TODO: Add your custom interface methods here
  179.  
  180. private:
  181.     //IMediaObjectImpl Methods   
  182.     STDMETHODIMP InternalAllocateStreamingResources(void);
  183.     STDMETHODIMP InternalDiscontinuity(DWORD dwInputStreamIndex);
  184.     STDMETHODIMP InternalFlush(void);
  185.     STDMETHODIMP InternalFreeStreamingResources(void);
  186.     STDMETHODIMP InternalGetInputMaxLatency(DWORD dwInputStreamIndex, REFERENCE_TIME *prtMaxLatency);
  187.     STDMETHODIMP InternalSetInputMaxLatency(DWORD dwInputStreamIndex, REFERENCE_TIME rtMaxLatency);
  188.     STDMETHODIMP InternalGetInputSizeInfo(DWORD dwInputStreamIndex, DWORD *pcbSize, DWORD *pcbMaxLookahead, DWORD *pcbAlignment);
  189.     STDMETHODIMP InternalGetOutputSizeInfo(DWORD dwOutputStreamIndex, DWORD *pcbSize, DWORD *pcbAlignment);
  190.     STDMETHODIMP InternalGetInputStreamInfo(DWORD dwInputStreamIndex, DWORD *pdwFlags);
  191.     STDMETHODIMP InternalGetOutputStreamInfo(DWORD dwOutputStreamIndex, DWORD *pdwFlags);
  192.     STDMETHODIMP InternalGetInputType(DWORD dwInputStreamIndex, DWORD dwTypeIndex, DMO_MEDIA_TYPE *pmt);
  193.     STDMETHODIMP InternalGetOutputType(DWORD dwOutputStreamIndex, DWORD dwTypeIndex, DMO_MEDIA_TYPE *pmt);
  194.     STDMETHODIMP InternalProcessInput(DWORD dwInputStreamIndex, IMediaBuffer *pBuffer, DWORD dwFlags, REFERENCE_TIME rtTimestamp, REFERENCE_TIME rtTimelength);
  195.     STDMETHODIMP InternalProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount, DMO_OUTPUT_DATA_BUFFER *pOutputBuffers, DWORD *pdwStatus);
  196.  
  197.     // IMediaObjectImpl Required overides
  198.     STDMETHODIMP InternalAcceptingInput(DWORD dwInputStreamIndex);
  199.     STDMETHODIMP InternalCheckInputType(DWORD dwInputStreamIndex, const DMO_MEDIA_TYPE *pmt);
  200.     STDMETHODIMP InternalCheckOutputType(DWORD dwOutputStreamIndex, const DMO_MEDIA_TYPE *pmt);
  201.     void Lock(void);
  202.     void Unlock(void);
  203.  
  204.     // Private functions
  205.     HRESULT UpdateStatesInternal();
  206.  
  207.     HRESULT DoProcess(BYTE *pbData, const BYTE *pbInputData, DWORD dwQuanta);
  208.  
  209.     WAVEFORMATEX* WaveFormat()
  210.     {
  211.         _ASSERTE(InputType(0)->formattype == FORMAT_WaveFormatEx);
  212.         return reinterpret_cast<WAVEFORMATEX*>(InputType(0)->pbFormat);
  213.     }
  214.  
  215. $$IF(!EMPTY_DSDMO)     // Sample DMO
  216.     // Private functions
  217.     template<class SampleType> __forceinline void DoOneSample(SampleType *l, SampleType *r);
  218. $$ENDIF
  219.  
  220.     // States of the DMO
  221.     bool    m_fDirty;
  222.     bool    m_fInitialized;
  223.  
  224.     // States of the input type
  225.     WORD    m_nChannels;
  226.     WORD    m_wBitsPerSample; 
  227.     DWORD    m_nSamplesPerSec;
  228.  
  229.     CComPtr<IMediaBuffer>    m_pBuffer;            // Pointer to the input buffer
  230.     BYTE                    *m_pbInputData;        // Pointer to the data in the input buffer
  231.     DWORD                    m_cbInputLength;    // Length of the data
  232.     REFERENCE_TIME            m_rtTimestamp;        // Most recent timestamp
  233.     bool                    m_bValidTime;        // Controls whether timestamp is valid or not
  234.  
  235. $$IF(EMPTY_DSDMO)
  236. // TODO: Declare member variables here
  237.     DWORD    m_dwParam1;
  238. $$ELSE    // Sample DMO
  239.     // States used by $$DSDMOID_NAME$$
  240.     float    m_fFreq;
  241.     float    m_fWidth;
  242.  
  243.     ULONG    m_ulPeriod;
  244.     float    m_fSineTablePeriod;
  245.     ULONG    m_ulPhase;
  246. $$ENDIF
  247.  
  248. };
  249.  
  250. #endif //__$$CLASS_NAME$$_H_
  251.  
  252.